/**
 * Copyright 2019 The AMP HTML Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import anyTest, { TestInterface } from 'ava';
import { Document } from '../../worker-thread/dom/Document';
import { Event } from '../../worker-thread/Event';
import { createTestingDocument } from '../DocumentCreation';

const test = anyTest as TestInterface<{
  document: Document;
}>;

test.beforeEach((t) => {
  const document = createTestingDocument();
  t.context = { document };
});

test('createEvent()', (t) => {
  const { document } = t.context;

  const e = document.createEvent('foo');
  t.is(e.type, 'foo');
  t.false(e.bubbles);
  t.false(e.cancelable);
});

test('Event constructor', (t) => {
  let e = new Event('foo', {});
  t.is(e.type, 'foo');
  t.false(e.bubbles);
  t.false(e.cancelable);

  e = new Event('foo', { bubbles: true, cancelable: true });
  t.is(e.type, 'foo');
  t.true(e.bubbles);
  t.true(e.cancelable);

  e = new Event('foo', {});
  e.initEvent('bar', true, true);
  t.is(e.type, 'bar');
  t.true(e.bubbles);
  t.true(e.cancelable);
});
